package model.proxy
{
	import model.AnneeEtude;
	import model.AnneeUniversitaire;
	import model.GroupeEtudiants;
	import model.Utilisateur;
	
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.remoting.mxml.RemoteObject;
	
	import org.puremvc.as3.interfaces.IProxy;
	import org.puremvc.as3.patterns.proxy.Proxy; 
	
	public class GroupeProxy extends Proxy implements IProxy 
	{ 
		
		public static const NAME : String = 'GroupeProxy';		
		public static const LISTE_GROUPES_OBTENUE : String = "ListeGroupesObtenue";
		public static const LISTE_ANNEES_ETUDE_OBTENUE : String = "ListeAnneesEtudeGroupObtenue";
		public static const LISTE_TYPES_ENSEIGNEMENT_OBTENUE : String = "ListeTypesEnseignementGroupObtenue";
		public static const LISTE_GROUPES_INCOMPATIBLES_OBTENUE : String = "ListeGroupesIncompatiblesObtenue";
		public static const LISTE_ANNEES_UNIVERSITAIRE_GROUPE_OBTENUE : String = "ListeAnneesUniversitaireGroupObtenue";
		private var remoteObject : RemoteObject = null;
		private var remoteObjectAnneeEtude : RemoteObject = null;
		private var remoteObjectTypeEnseignement : RemoteObject = null;
		private var remoteObjectAnneeUniversitaire : RemoteObject = null;
		
		/** 
		 * Constructor 
		 * We create the table logins and insert a login by default to test 
		 */ 
		public function GroupeProxy(data:Object=null) 
		{ 
			super(NAME, data);
			
			remoteObject = new RemoteObject();
			remoteObject.destination = "RemoteServiceGroupeEtudiants";
			remoteObject.source = "RemoteServiceGroupeEtudiants";
			remoteObject.endpoint = ApplicationFacade.SERVEUR;
			
			remoteObjectAnneeEtude = new RemoteObject();
			remoteObjectAnneeEtude.destination = "RemoteServiceAnneeEtude";
			remoteObjectAnneeEtude.source = "RemoteServiceAnneeEtude";
			remoteObjectAnneeEtude.endpoint = ApplicationFacade.SERVEUR;
			
			remoteObjectTypeEnseignement = new RemoteObject();
			remoteObjectTypeEnseignement.destination = "RemoteServiceTypeEnseignement";
			remoteObjectTypeEnseignement.source = "RemoteServiceTypeEnseignement";
			remoteObjectTypeEnseignement.endpoint = ApplicationFacade.SERVEUR;
			
			remoteObjectAnneeUniversitaire = new RemoteObject();
			remoteObjectAnneeUniversitaire.destination = "RemoteServiceAnneeUniversitaire";
			remoteObjectAnneeUniversitaire.source = "RemoteServiceAnneeUniversitaire";
			remoteObjectAnneeUniversitaire.endpoint = ApplicationFacade.SERVEUR;
		} 
 	
 		public function obtenirListeGroupes(anneeEtude:AnneeEtude) : void 
 		{
 			remoteObject.addEventListener(ResultEvent.RESULT, listeGroupesObtenue);
			remoteObject.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObject.obtenirListeGroupesEtudiants(anneeEtude);
 		}
 		
 		
 		 public function obtenirListeGroupesIncompatibles(groupe:GroupeEtudiants) : void 
 		{
 			remoteObject.addEventListener(ResultEvent.RESULT, listeGroupesIncompatiblesObtenue);
			remoteObject.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObject.obtenirListeGroupesIncompatibles(groupe);
 		}
 		
 		public function obtenirListeAnneesEtude(anneeUniversitaire : AnneeUniversitaire) : void 
 		{
 			remoteObjectAnneeEtude.addEventListener(ResultEvent.RESULT, listeAnneesEtudeObtenue);
			remoteObjectAnneeEtude.addEventListener(FaultEvent.FAULT, onFault);
			var utilisateur:Utilisateur = LoginProxy.user;
 			remoteObjectAnneeEtude.obtenirListeAnneesEtudeUser(utilisateur, anneeUniversitaire);
 		}
 		
 		public function obtenirListeTypesEnseignement() : void 
 		{
 			remoteObjectTypeEnseignement.addEventListener(ResultEvent.RESULT, listeTypesEnseignementObtenue);
			remoteObjectTypeEnseignement.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectTypeEnseignement.obtenirListeTypesEnseignement();
 		}
 		
 		public function obtenirListeAnneesUniversitaire() : void 
 		{
 			remoteObjectAnneeUniversitaire.addEventListener(ResultEvent.RESULT, listeAnneesUniversitaireObtenue);
			remoteObjectAnneeUniversitaire.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectAnneeUniversitaire.obtenirListeAnneesUniversitaire();
 		}
 		
 		
 		public function validerAjoutGroupe(groupe:GroupeEtudiants,anneeEtude:AnneeEtude,listeGroupesIncompatibles:Array):void
		{
			remoteObject.addEventListener(ResultEvent.RESULT, listeGroupesObtenue);
			remoteObject.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObject.ajouterGroupeEtudiants(groupe,anneeEtude,listeGroupesIncompatibles);
			trace("Ajout");
		}
		
		public function validerModifGroupe(groupe:GroupeEtudiants,anneeEtude:AnneeEtude,listeGroupesIncompatibles:Array):void
		{
			remoteObject.addEventListener(ResultEvent.RESULT, listeGroupesObtenue);
			remoteObject.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObject.modifierGroupeEtudiants(groupe, anneeEtude, listeGroupesIncompatibles);
			trace("Modifier");
		}
		
		public function supprimerGroupe(listeGroupes:Array, anneeEtude:AnneeEtude):void
		{
			remoteObject.addEventListener(ResultEvent.RESULT, listeGroupesObtenue);
			remoteObject.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObject.supprimerGroupeEtudiants(listeGroupes,anneeEtude);
 			trace("Suppression");
		}
		 
		private function listeGroupesObtenue(event:ResultEvent):void
		{
			remoteObject.removeEventListener(ResultEvent.RESULT, listeGroupesObtenue);
			var listeGroupes:Array = (event.result as Array)
			sendNotification(LISTE_GROUPES_OBTENUE, listeGroupes);
		}
		
		private function listeGroupesIncompatiblesObtenue(event:ResultEvent):void
		{
			remoteObject.removeEventListener(ResultEvent.RESULT, listeGroupesIncompatiblesObtenue);
			var listeGroupesIncompatibles:Array = (event.result as Array)
			sendNotification(LISTE_GROUPES_INCOMPATIBLES_OBTENUE, listeGroupesIncompatibles);
		}
		
		private function listeAnneesEtudeObtenue(event:ResultEvent):void
		{
			remoteObjectAnneeEtude.removeEventListener(ResultEvent.RESULT, listeAnneesEtudeObtenue);
			var listeAnneesEtude:Array = (event.result as Array)
			sendNotification(LISTE_ANNEES_ETUDE_OBTENUE, listeAnneesEtude);
		}
		
		private function listeTypesEnseignementObtenue(event:ResultEvent):void
		{
			remoteObjectTypeEnseignement.removeEventListener(ResultEvent.RESULT, listeTypesEnseignementObtenue);
			var listeTypesEnseignement:Array = (event.result as Array)
			sendNotification(LISTE_TYPES_ENSEIGNEMENT_OBTENUE, listeTypesEnseignement);
		}
		
		private function listeAnneesUniversitaireObtenue(event:ResultEvent):void
		{
			remoteObjectAnneeUniversitaire.removeEventListener(ResultEvent.RESULT, listeAnneesUniversitaireObtenue);
			var listeAnneesUniversitaire:Array = (event.result as Array)
			sendNotification(LISTE_ANNEES_UNIVERSITAIRE_GROUPE_OBTENUE, listeAnneesUniversitaire);
		}
		
		private function listeGroupesSupprimee(event:ResultEvent):void
		{
			remoteObject.removeEventListener(ResultEvent.RESULT, listeGroupesSupprimee);
			var listeGroupes:Array = (event.result as Array)
			sendNotification(LISTE_GROUPES_OBTENUE, listeGroupes);
		}
		
		private function onFault(event:FaultEvent):void
		{
			trace("Fault");			
		}
		
		
	}
}